<!DOCTYPE html>
<html lang="en">
	<body>

		<script src="../build/three.min.js"></script>
		<script src="../examples/js/math/TypeArrayVector3.js"></script>

		<script>

			var Benchmark = function ( title, test ) {

				var titleDom = document.createElement( 'div' );
				titleDom.style.fontWeight = 'bold';
				titleDom.textContent = title;
				document.body.appendChild( titleDom );

				var msDom = document.createElement( 'div' );
				document.body.appendChild( msDom );

				this.run = function () {

					var start = performance.now();

					test();

					msDom.textContent = performance.now() - start;

				}

			};


			var vector11 = new THREE.Vector3( 1.2, 2.3, 3.4 );
			var vector12 = new THREE.Vector3( 1.2, 2.3, 3.4 );
			var vector13 = new THREE.Vector3( 1.2, 2.3, 3.4 );

			var vector21 = new THREE.TypeArrayVector3( 1.2, 2.3, 3.4 );
			var vector22 = new THREE.TypeArrayVector3( 1.2, 2.3, 3.4 );
			var vector23 = new THREE.TypeArrayVector3( 1.2, 2.3, 3.4 );

			var benchmarks = [

				new Benchmark( 'new Vector3()', function () {

					for ( var i = 0; i < 10000; i ++ ) {

						var vector = new THREE.Vector3( 1, 1, 1 );

					}

				} ),

				new Benchmark( 'new TypeArrayVector3()', function () {

					for ( var i = 0; i < 10000; i ++ ) {

						var vector = new THREE.TypeArrayVector3( 1, 1, 1 );

					}

				} ),

				new Benchmark( 'Vector3 add()', function () {

					for ( var i = 0; i < 10000000; i ++ ) {

						vector11.add( vector12 );

					}

				} ),

				new Benchmark( 'TypeArrayVector3 add()', function () {

					for ( var i = 0; i < 10000000; i ++ ) {

						vector21.add( vector22 );

					}

				} ),

				new Benchmark( 'Vector3 addVectors()', function () {

					for ( var i = 0; i < 10000000; i ++ ) {

						vector11.addVectors( vector12, vector13 );

					}

				} ),

				new Benchmark( 'TypeArrayVector3 addVectors()', function () {

					for ( var i = 0; i < 10000000; i ++ ) {

						vector21.addVectors( vector22, vector23 );

					}

				} )

			];

			function update () {

				vector11 = new THREE.Vector3( Math.random(), Math.random(), Math.random() );
				vector12 = new THREE.Vector3( Math.random(), Math.random(), Math.random() );

				vector21 = new THREE.TypeArrayVector3().set( vector11.x, vector11.y, vector11.z );
				vector22 = new THREE.TypeArrayVector3().set( vector12.x, vector12.y, vector12.z );

				for ( var i = 0, l = benchmarks.length; i < l; i ++ ) {

					benchmarks[ i ].run();

				}

				setTimeout( update, 2000 );

			}

			update();

		</script>

	</body>
</html>
